#ifndef USER_H
#define USER_H

#ifdef BUILD_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif

namespace eGaduLib
{
    /**
    @brief Klasa zawierająca informacje o kontakcie.

    Przechowuje: numer, typ, status, opis.
    */
	class DLL_EXPORT User
	{
	public:
        /// Konstruktor
		User(void);

		/**
		@brief Konstruktor z parametrami

		Działanie takie same jak metody User::set
		*/
		User(int _uin, char *_name, int _type = 0x01);

		/// Destruktor
		~User(void);

        /**
        @brief Metoda wypełniająca informacje o kontakcie
        @param [in] _uin Numer Gadu-Gadu
        @param [in] _name Nazwa kontaktu
        @param [in] _type Typ kontaktu (domyślnie EGADU_USR_BUDDY)
        */
		void set(int _uin, char *_name, int _type = 0x01);

		/**
		@brief Metoda wypełniająca polę type
		@param [in] _type Typ kontaktu
		*/
		void setType(int _type);

		/**
		@brief Metoda wypełniająca polę uin
		@param [in] _uin Numer Gadu-Gadu
		*/
		void setUin(int _uin);

		/**
		@brief Metoda wypełniająca polę name
		@param [in] _name Nazwa kontaktu
		*/
		void setName(char *_name);

		/**
		@brief Metoda wypełniająca polę status
		@note Użytkownik nie powinien korzystać z tej metody.
		@param [in] _status Status kontaktu
		*/
		void setStatus(int _status);

        /**
		@brief Metoda wypełniająca polę desc
		@note Użytkownik nie powinien korzystać z tej metody.
		@param [in] _desc Opis kontaktu
		*/
		void setDesc(char *_desc);

        /**
        @brief Metoda zwracająca wartość pola type
        @return Typ kontaktu
        */
		int getType();

        /**
        @brief Metoda zwracająca wartość pola uin
        @return Numer Gadu-Gadu kontaktu
        */
		int getUin();

        /**
        @brief Metoda zwracająca wartość pola name
        @return Nazwa kontaktu
        */
		char *getName();

        /**
        @brief Metoda zwracająca wartość pola status
        @return Status kontaktu (zobacz ::EGADU_STATUS)
        */
		int getStatus();

        /**
        @brief Metoda zwracająca wartość pola desc
        @return Opis kontaktu
        */
		char *getDesc();

        /**
        @brief Metoda zwalniająca pamięć używaną przez klasę
        */
		void release();

	protected:
        /// Numer Gadu-Gadu kontaktu
		int uin;
		/// Typ kontaktu
		int type;
		/// Status kontaktu
		int status;
		/// Nazwa kontaktu
		char *name;
		/// Opis kontaktu
		char *desc;
	};
}

#endif
